def gen123():
    yield 1
    yield 2
    yield 3

g = gen123()
g

#Generators are iterators
next(g) 
next(g)
next(g)
next(g)

for v in gen123():
    print(v)

h  =  gen123()
h
i = gen123()
i
h is i

next(h)
next(h)
next(i)

#When is generator code executed?
def gen246():
    print("About to yield 2")
    yield 2
    print("About to yield 4")
    yield 4
    print("About to yield 6")
    yield 6
    print("About to return")

g = gen246()

next(g) 
next(g)
next(g)
next(g)

